Memory systems and subsystems are used by computers to store programs and data. Memory management provides capabilities such as multiple address spaces for separate processes, sharing of memory between processes, relocation of logical processor addresses into physical memory addresses, and protecting memory areas by only allowing certain operations such as read, write or execute, to such areas.
In addition, memory management units often provide so-called virtual memory capabilities. Virtual memory means that a processor can address more memory than there is physically present in main memory. This is usually done by dividing the total memory space into many small equal size units called pages. The entire memory space is stored on a secondary storage device, such as disk storage. During execution of the program only those pages are brought into main memory that are required on demand, replacing other pages that are no longer necessary. Virtual memory management schemes usually have mechanisms that assist in the page replacement operation, such as maintaining a status for each page whether it had recently been used or whether it had been written into.
The principles of memory management have been known since the early history of computers and are commonplace in state-of-the-art computing equipment. However, the usage of memory management schemes normally results in a loss of performance for the computer operation because each access to memory has to be translated and checked by the memory management unit, adding to the access time of memory and incurring a delay between the time the processor issues the address to be translated until the data is received from memory.